//创建路由器对象，添加用户注册的路由（post  /reg）,响应{code：200，msg：‘注册成功’}

//引入express
const express = require('express');
//引入连接池模块
const pool = require('../pool.js'); 
//创建路由器对象
const r = express.Router();


//添加路由

//1.用户注册的路由（post  /reg）
//http://127.0.0.1:8080/v1/users/reg
r.post('/reg',(req,res,next)=>{
	//1.1获取post请求的数据
	let obj = req.body;
	console.log(obj);
	//1.2验证各项数据是否为空
	if (!obj.uname){
		//json方法将js对象转为json对象（json对象也叫字符串对象）
		//json和send作用是一样的
		res.json({code:401,msg:'uname不能为空'});
		//阻止往后执行
		//这是函数内，使用return
		return;
	}
	//练习：完成其他各项的验证
	if (!obj.upwd){
		res.send({code:402,msg:'upwd不能为空'});
		return;
	}
	if (!obj.email){
		res.send({code:403,msg:'email不能为空'});
		return;
	}
	if (!obj.phone){
		res.send({code:404,msg:'phone不能为空'});
		return;
	}
	if (!/^1[3-9]\d{9}$/.test(obj.phone)){
		res.send({code:405,msg:'手机号码格式错误'});
		return;
	}
	//1.3执行SQL命令
	pool.query('insert into xz_user set  ?',[obj],(err,result)=>{
		if (err){
		//如果数据库执行出现了错误，交给下一个中间件（错误处理的中间件）执行
		next(err);
		//阻止往后执行
		return;
		}
		console.log(result);
		//表示插入成功
        res.send({code:200,msg:'注册成功'});
	});
});


//2.用户登录路由（post  /login）
//http://127.0.0.1:8080/v1/users/login
r.post('/login',(req,res,next)=>{
  //2.1获取post请求的数据
  let obj = req.body;
  console.log(obj);
  //2.2验证各项是否为空
  if (!obj.uname){
	  res.send({code:401,msg:'用户名不能为空'});
	  return;
  }
  if (!obj.upwd){
	  res.send({code:402,msg:'密码不能为空'});
	  return;
  }
  //2.3执行SQL命令
  
  pool.query('select * from xz_user where uname=? and upwd=?',[obj.uname,obj.upwd],(err,result)=>{
	 //如果查询到了用户名和密码同事匹配的数据就是登录成功，否则登录失败
	  if (err){//这个括号内的err是指SQL命令的错误或者是数据库的错误
		  next(err);
		  return;
	  }
	  console.log(result);
	  //查询的结果是数组，如果是空数组说明登录失败，否则登录成功
	  //判断空数组，用数组的长度是否为0
	  if (result.length === 0){
		  res.send({code:201,msg:'登录失败'});
	  }else {
		  res.send({code:200,msg:'登录成功'});
	  }; 
  });
});


//3.修改用户（put /）
//http://127.0.0.1:8080/v1/users/
r.put('/',(req,res,next)=>{
	//3.1获取post传递的数据（uid,email,phone,user_name,gender）
	let obj = req.body;
	console.log(obj);
	//3.2验证各项数据是否为空
	let i = 400;//记录状态码
	for (let k in obj){
		//每次遍历一个属性，状态码+1
		i++;
		console.log(k,obj[k])
		if (!obj[k]){
			res.send({code:i,msg:k + '不能为空'});
			return;
		};
	};
	//3.3执行SQL命令，修改用户的数据
	pool.query('update xz_user set ? where uid=?',[obj,obj.uid],(err,result)=>{
		if (err){
			next(err);
			return;
		};
		console.log(result);
		//结果是对象，如果对象下的affectedRows的值是0说明修改失败，否则修改成功
		if (result.affectedRows === 0){
			res.send({code:201,msg:'修改失败'});
		}else {
			res.send({code:200,msg:'修改成功'});
		}
	});
});


//4.查找员工（get /uid）
//http://127.0.0.1:8080/v1/users/5
r.get('/:uid',(req,res,next)=>{
	//4.1获取传递的编号
	let obj = req.params;
	console.log(obj);
	//4.2执行SQL命令
	//查询编号对应的用户
	pool.query('select uid,uname,email,phone from xz_user where uid=?',[obj.uid],(err,result)=>{
		if (err){
			next(err);
			return;
		}
		if (result.length === 0){
			res.send({code:201,msg:'该用户不存在'});
		}else {
			res.send({code:200,msg:'查询成功',data:result});
		}
	});
});

//5.删除员工（delete  /uid）
//http://127.0.0.1:8080/v1/users/10
r.delete('/:uid',(req,res,next)=>{
	//5.1获取传递的编号
	let obj = req.params;
	console.log(obj);
	//5.2执行SQL命令
	//删除编号对应的用户
	pool.query('delete from xz_user where uid=?',[obj.uid],(err,result)=>{
		if (err){
			next(err);
			return;
		}
		console.log(result);
		if (result.affectedRows === 0){
			res.send({code:201,msg:'删除失败'});
		}else{
			res.send({code:200,msg:'删除成功'});
		}
	});
});


//6.用户列表（get  /）
//http://127.0.0.1:8080/v1/users/
r.get('/',(req,res,next)=>{
	//6.1获取查询字符串get传递的数据
	let obj = req.query;
	console.log(obj);
	//6.2验证页码是否为空，如果为空设置默认值
	if (!obj.pno) obj.pno = 1;
	if (!obj.count) obj.count = 5;
	//6.3计算开始查询的值
	let start = (obj.pno - 1) * obj.count;
	//6.4把每页的数据量转为数值型
	let size = parseInt(obj.count);
    //6.5执行SQL命令（分页查询）
	pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
		if (err){
			next(err);
			return;
		};
		//查询结果是数组，把数组响应给浏览器
        res.send({code:200,msg:'查找成功',data:result});
	});
});


//导出路由器对象
module.exports = r;

